home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / A-Monthly Disks / (c)aac.d64 / mazin mouse.c (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  10KB  |  347 lines

  1. 10 REM ******************************
  2. 20 REM *****   'MAZIN MOUSE'    *****
  3. 21 REM ***                        ***
  4. 22 REM             -BY-
  5. 23 REM          HERB UREN
  6. 24 REM       OTTAWA, ONTARIO
  7. 25 REM     (AT THE OUTER LIMIT
  8. 26 REM        OF HIS SKILLS)
  9. 27 REM ***                        ***
  10. 28 REM *****                    *****
  11. 29 REM ******************************
  12. 30 IF AA=1 THEN 80
  13. 40 PRINT"[147]":POKE 53280,12:POKE 53281,0
  14. 50 GOSUB 4000:REM HOLE&CHEESE SPRITES
  15. 60 GOSUB 5000 :REM TITLE SCREEN
  16. 70 IF AA=0THENAA=1:LOAD"+8POSMOUSE",8,1
  17. 80 POKE V+21,3
  18. 82 FOR OY=244 TO 230 STEP-1
  19. 84 FORT=1TO60:NEXT:POKEV+1,OY:NEXT
  20. 85 PRINT"WOULD YOU LIKE     INSTRUCTIONS -Y/N";
  21. 90 GETKP$:IFKP$="" THEN 90
  22. 95 IF KP$="Y" THEN GOSUB5500
  23. 100 GOSUB6000
  24. 1000 REM ******  MAIN  ******           1001 :
  25. 1040 RW=15:CL=32:GOSUB7200:PRINT"[158]<HELP=H>";
  26. 1042 RW=6:CL=31:GOSUB 7200:PRINT"DIRECTION":PRINTSPC(33);:INPUT"  * [157][157][157][157]";DI$
  27. 1045 IF HF=1 THEN HF=0:GOSUB7500
  28. 1050 IF DI$="H"  THEN 7300
  29. 1060 IF DI$="N"  THEN POKE S0,202:GOTO1200
  30. 1070 IF DI$="S"  THEN POKE S0,206:GOTO1200
  31. 1080 IF DI$="E"  THEN POKE S0,204:GOTO1200
  32. 1090 IF DI$="W"  THEN POKE S0,208:GOTO1200
  33. 1100 IF DI$="NE" THEN POKE S0,203:GOTO1200
  34. 1110 IF DI$="SW" THEN POKE S0,207:GOTO1200
  35. 1120 IF DI$="SE" THEN POKE S0,205:GOTO1200
  36. 1130 IF DI$="NW" THEN POKE S0,209:GOTO1200
  37. 1140 GOTO 1040
  38. 1180 :
  39. 1200 RW=10:CL=31:GOSUB7200
  40. 1203 PRINT" HOW FAR ":PRINTSPC(32);:INPUT"   0  [157][157][157][157][157]";LE$
  41. 1205 IF HF=1 THEN HF=0:GOSUB7500
  42. 1206 IF LE$="H" THEN 7400
  43. 1208 L=VAL(LE$)
  44. 1210 IF L=0 THEN 1040
  45. 1212 IF L>300 THEN 1040
  46. 1215 IFL=1 THENL=2
  47. 1220 PTR=PEEK(S0)-201
  48. 1230 ON PTR GOSUB 2110,2210,2310,2410,2510,2610,2710,2810
  49. 1235 IFRS=1THENRS=0:GOTO100 :REM RESTART
  50. 1237 IF CH=0 THEN GOSUB 3900:REM 'HOME'
  51. 1240 GOTO 1040
  52. 2000 REM ***** SET UP MOVE *****
  53. 2100 REM *** NORTH ***
  54. 2110 GOSUB 2890: REM ASPECT RATIO
  55. 2120 NX=OX:NY=OY-L:IX=0:IY=-1:AX=11:AY=2
  56. 2125 REM  AX,AY - OFFSET FOR MOUSE NOSE
  57. 2130 GOSUB2900:GOSUB 3000
  58. 2199 RETURN
  59. 2200 REM *** NORTHEAST ***
  60. 2210 GOSUB 2895
  61. 2220 NX=OX+L:NY=OY-L:IX=+1:IY=-1:AX=20:AY=5
  62. 2230 GOSUB 2900:GOSUB 3000
  63. 2299 RETURN
  64. 2300 REM *** EAST ***
  65. 2310 L=INT(L/2)*2
  66. 2320 NX=OX+L:NY=OY:IX=+1:IY=0:AX=22:AY=13
  67. 2330 GOSUB2900:GOSUB 3000
  68. 2399 RETURN
  69. 2400 REM *** SOUTHEAST ***
  70. 2410 GOSUB 2895
  71. 2420 NX=OX+L:NY=OY+L:IX=+1:IY=+1:AX=19:AY=19
  72. 2430 GOSUB2900:GOSUB 3000
  73. 2499 RETURN
  74. 2500 REM *** SOUTH ***
  75. 2510 GOSUB 2890: REM ASPECT RATIO
  76. 2520 NX=OX:NY=OY+L:IX=0:IY=+1:AX=11:AY=21
  77. 2530 GOSUB2900:GOSUB 3000
  78. 2599 RETURN
  79. 2600 REM *** SOUTHWEST ***
  80. 2610 GOSUB 2895
  81. 2620 NX=OX-L:NY=OY+L:IX=-1:IY=+1:AX=5:AY=18
  82. 2630 GOSUB2900:GOSUB 3000
  83. 2699 RETURN
  84. 2700 REM *** WEST ***
  85. 2710 L=INT(L/2)*2
  86. 2720 NX=OX-L:NY=OY:IX=-1:IY=0:AX=3:AY=11
  87. 2730 GOSUB2900:GOSUB 3000
  88. 2799 RETURN
  89. 2800 REM *** NORTHWEST ***
  90. 2810 GOSUB 2895
  91. 2820 NX=OX-L:NY=OY-L:IX=-1:IY=-1:AX=5:AY=4
  92. 2830 GOSUB2900:GOSUB 3000
  93. 2840 RETURN
  94. 2890 REM * CORRECT ASPECT RATIO-FULL *
  95. 2892 L=L-(.3*L):RETURN
  96. 2895 REM * CORRECT ASPECT RATIO-PART *
  97. 2897 L=L-(.2*L):RETURN
  98. 2900 REM *** PRE-CHECK RANGE ***
  99. 2910 IF NY<50 THEN L=L-(50-NY)
  100. 2920 IF NY>228 THEN L=L-(NY-228)
  101. 2930 IF NX>238 THEN L=L-(NX-238)
  102. 2940 IF NX<22 THEN L=L-(22-NX)
  103. 2950 RETURN
  104. 3000 REM ***** MOVER *****
  105. 3002 DU=PEEK(V+31):DU=PEEK(V+30)
  106. 3005 DX=2*IX:DY=2*IY: REM 2-PIXEL STEPS
  107. 3010 FOR NN=0 TO INT(L/2): REM COMPENSATE FOR 2-PIXEL STEPS
  108. 3015 OX=OX+DX:OY=OY+DY
  109. 3020 POKEV,OX:POKEV+1,OY
  110. 3030 SR=PEEK(V+30):IF SR AND 1 THEN 3700 :REM SPRITE COLLISION
  111. 3040 IF PEEK(V+31)AND1 THEN 3600 :REM TEXT COLLISION
  112. 3050 NEXT
  113. 3060 IF OX<22 THEN OX=22
  114. 3065 IF OX>238 THEN OX=238
  115. 3070 IF OY<50 THEN OY=50
  116. 3075 IF OY>228 THEN OY=228
  117. 3090 RETURN
  118. 3600 REM *** TEXT COLLISION ***
  119. 3605 IF OX>238 THEN RETURN:REM NOT BORDER
  120. 3610 RR=INT((OY-50+AY)/8):CC=INT((OX-24+AX)/8)
  121. 3620 RW=RR:CL=CC:GOSUB7200:PRINT" ";
  122. 3630 RW=RR+IY:CL=CC+IX:GOSUB7200:PRINT" ";
  123. 3635 RW=RR-IY:CL=CC:GOSUB7200:PRINT" ";
  124. 3640 RW=RR-IY:CL=CC-IX:GOSUB7200:PRINT" ";
  125. 3645 RW=RR:CL=CC-IX:GOSUB7200:PRINT" ";
  126. 3650 FORJ=2TO7
  127. 3655 IF(PEEK(V+21) AND 2^J)=0 THEN 3665
  128. 3660 NEXT J:RETURN :REM ALL CHEESES ON
  129. 3665 N=J-1:GOSUB7120: REM NEW CHEESE
  130. 3670 POKEV+21,PEEK(V+21)OR 2^J
  131. 3680 CH=CH+1:RW=3:CL=34:GOSUB7200:PRINT"[158]";CH
  132. 3699 RETURN : REM TO 1235
  133. 3700 REM *** SPRITE COLLISION ***
  134. 3710 IF SR AND 2 THEN 3770
  135. 3715 N=2
  136. 3720 IF SR AND(2^N) THEN POKE(V+21),(PEEK(V+21) AND NOT 2^N):GOTO3740
  137. 3730 N=N+1:IFN=8 THEN RETURN
  138. 3735 GOTO 3720
  139. 3740 CH=CH-1:RW=3:CL=34:GOSUB7200:PRINT"[158]";CH
  140. 3760 RETURN : REM TO 1235
  141. 3770 REM *** START OR END ***
  142. 3775 IF CH>0 THEN 3040
  143. 3800 RW=17:CL=0:GOSUB7200:FORN=1TO6:PRINTSPC(31);EH$(N);:NEXT
  144. 3820 GET AN$:IF AN$="" THEN3820
  145. 3830 IF AN$="N" THEN PRINT"[147][154]":POKE 53280,14:POKE 53281,6:POKEV+21,0:END
  146. 3840 IF AN$="Y" THENPOKEV,160:POKEV+1,230:LE$="0":DI$="":RS=1:RETURN
  147. 3850 GOTO 3820
  148. 3900 REM **** FINISH ROUTINE ****
  149. 3910 RW=18:CL=0:GOSUB7200:FORN=1TO5:PRINTSPC(31);HH$(N);:NEXT
  150. 3920 REM  FOR T=1TO2000:NEXT
  151. 3930 RETURN
  152. 4000 REM **READ HOLE/CHEESE DATA **
  153. 4010 M=64:NN=63:FOR PG=200 TO 201
  154. 4020 FOR N=0TONN:READ BY:POKE PG*M+N,BY:NEXT:NEXT
  155. 4030 RETURN
  156. 4040 DATA 0,0,0,0,0,0,1,248,0,15,255,0,31,255,128, 63
  157. 4050 DATA 255,192,127,255,224,255,255,240,255,255,240,255,255,240,255, 255
  158. 4060 DATA 240,255,255,240,255,255,240,255,255,240,255,255,240,255,255, 240
  159. 4070 DATA 255,255,240,255,255,240,255,255,240,255,255,240,255,255,240, 0
  160. 4080 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0
  161. 4090 DATA 0,0,0,0,0,0,0,0,0,24,0,0,124,0,0, 126
  162. 4100 DATA 0,1,252,0,3,63,128,15,31,128,15,124,224,29,248, 240
  163. 4120 DATA 60,249,248,44,223,248,7,143,176,0,0,0,0,0,0, 0
  164. 5000 REM *** TITLE SCREEN ***
  165. 5010 POKE53281,11:PRINT"[147]";:CB=55295:V=53248:S0=2040:POKE V+21,0
  166. 5020 PRINT"                "
  167. 5021 PRINT"                 "
  168. 5022 PRINT"                 "
  169. 5023 PRINT"                    "
  170. 5024 PRINT"                 "
  171. 5025 FORT=1TO100:NEXT:PRINT:PRINT
  172. 5030 PRINT"               "
  173. 5031 PRINT"              "
  174. 5032 PRINT"             "
  175. 5033 PRINT"               "
  176. 5034 PRINT"                "
  177. 5035 FORT=1TO100:NEXT:PRINT:PRINT
  178. 5036 PRINT"                  "
  179. 5037 PRINT"             "
  180. 5038 PRINT"               "
  181. 5039 PRINT"           "
  182. 5040 PRINT"                  "
  183. 5045 PRINT"[158]";
  184. 5100 REM *** SET UP SPRITES ***
  185. 5105 REM *** HOLE ***
  186. 5110 POKE 2041,200:POKEV+40,0:POKE V+3,229:POKE V+2,161:POKEV+21,2
  187. 5112 FORT=1TO400:NEXT
  188. 5115 REM *** MOUSE ***
  189. 5120 OX=160:OY=244
  190. 5130 POKE 2040,202:POKEV+39,1:POKE V,OX:POKEV+1,OY
  191. 5140 REM *** CHEESES ***
  192. 5150 FORN=1TO6:GOSUB 7100
  193. 5160 NEXT N
  194. 5170 REM * MESSAGES *
  195. 5180 DH$(1)="[158] NW N NE "
  196. 5181 DH$(2)="    :    "
  197. 5182 DH$(3)=" W--+--E "
  198. 5183 DH$(4)="    :    "
  199. 5185 DH$(5)=" SW S SE "
  200. 5186 DL$(1)="[158]NUMBER OF"
  201. 5187 DL$(2)="  STEPS  "
  202. 5188 DL$(3)="UP TO 300"
  203. 5189 DL$(4)="0  35  70"
  204. 5190 DL$(5)="^...^...^"
  205. 5191 DL$(6)="  SCALE  "
  206. 5192 HH$(1)="[158]  NOW..  "
  207. 5193 HH$(2)="  BACK   "
  208. 5194 HH$(3)="  HOME   "
  209. 5195 HH$(4)="CAREFULLY"
  210. 5196 HH$(5)="   !!!   "
  211. 5197 EH$(1)="[153] GREAT ! "
  212. 5198 EH$(2)="         "
  213. 5199 EH$(3)="  PLAY   "
  214. 5200 EH$(4)=" AGAIN ? "
  215. 5205 EH$(5)=" Y OR N  "
  216. 5210 EH$(6)="         "
  217. 5225 A1$="  [157][157]  [146]"
  218. 5230 RETURN
  219. 5291 :
  220. 5500 REM ** INSTRUCTIONS **
  221. 5501 PRINT"[147]"
  222. 5510 PRINT"   'MAZIN' MOUSE IS INTENDED TO GIVE
  223. 5515 [153]"   PRACTICE IN
  224. 5520 PRINT"   1. THE POINTS OF THE COMPASS
  225. 5525 RW[178]14:CL[178]0:[141]7200
  226. 5530 [129]N[178]1[164]5:[153][166]5);DH$(N):[130]
  227. 5540 [129]T[178]1[164]3000:[130]
  228. 5550 RW[178]7:CL[178]0:[141]7200:
  229. 5560 [153][166]18);"AND"
  230. 5570 [153]"   2. THE ESTIMATION OF DISTANCE
  231. 5575 PRINT"          (ON THE SCREEN)
  232. 5580 RW[178]14:CL[178]0:[141]7200
  233. 5585 [129]N[178]1[164]5:[153][166]25);DL$(N):[130]
  234. 5590 [129]T[178]1[164]3000:[130]
  235. 5595 [153]"     PRESS SPACE BAR TO CONTINUEWAIT"
  236. 5600 [161] G$ :[139] G$[178]"" [167] 5600
  237. 5620 [153]"LOAD   HELP THIS MOUSE (ON THE GAME SCREEN)
  238. 5625 FOR N=1TO21:PRINTSPC(15);"[221]":FORT=1TO50:NEXT:NEXT:PRINTSPC(15);"[173]>";
  239. 5627 FORT=1TO1000:NEXT
  240. 5630 PRINT"  GATHER THESE"
  241. 5635 PRINT"  CHEESES [174]"
  242. 5640 FOR N=1TO5 :PRINTSPC(10);"[221]":FORT=1TO 50:NEXT:NEXT:PRINTSPC(9);"<[189]"
  243. 5650 CX=50:FORN=1TO4:POKEV+2+2*N,CX:POKE V+3+2*N,80+20*N
  244. 5655 POKEV+21,PEEK(V+21)OR 2^N*2 :NEXT
  245. 5657 FORT=1TO1000:NEXT
  246. 5660 PRINT"WITHOUT BUMPING":PRINT"  INTO THESE"
  247. 5670 PRINT"    THINGS";:FORN=1TO24:PRINT"-";:FORT=1TO40:NEXT:NEXT
  248. 5672 PRINT"> ";A1$;"":FORT=1TO 1000:NEXT
  249. 5675 RW=4:CL=22:GOSUB7200:PRINT"AT THE PROMPT":PRINTSPC(22)" DIRECTION[146] ? ";
  250. 5680 FOR N=1TO5:PRINT " [146][157]";:FORT=1TO200:NEXT:PRINT"*[157]";:FORT=1TO200:NEXT:NEXT
  251. 5685 PRINT:PRINTSPC(22)"ENTER ONE OF .."
  252. 5690 PRINTSPC(26);"N":POKES0,202:GOSUB5699
  253. 5691 PRINTSPC(26);"NE":POKES0,203:GOSUB5699
  254. 5692 PRINTSPC(26);"E":POKES0,204:GOSUB5699THOUT BUMPING
  255. 5693 PRINTSPC(26);"SE":POKES0,205:GOSUB5699
  256. 5694 PRINTSPC(26);"S" :POKES0,206:GOSUB5699
  257. 5695 PRINTSPC(26);"SW":POKES0,207:GOSUB 5699
  258. 5696 PRINTSPC(26);"W":POKES0,208:GOSUB5699
  259. 5697 PRINTSPC(26);"NW":POKES0,209:GOSUB5699
  260. 5698 POKES0,202:GOTO 5700
  261. 5699 FORT=1TO700:NEXT:RETURN
  262. 5700 RW=3:CL=0:GOSUB7200:FORN=1TO15:PRINTSPC(22);"                ":NEXT
  263. 5710 RW=4:CL=22:GOSUB7200:PRINT"AT THE PROMPT":PRINTSPC(22)"   HOW FAR[146] ? ";
  264. 5720 FOR N=1TO5:PRINT " [146][157]";:FORT=1TO200:NEXT:PRINT"0[157]";:FORT=1TO200:NEXT:NEXT
  265. 5730 PRINT:PRINTSPC(22)"ENTER THE NUMBER"
  266. 5740 PRINTSPC(22)" OF MOUSE STEPS ":FORT=1TO1000:NEXT
  267. 5750 PRINTSPC(22)" THIS IS ABOUT  "
  268. 5760 PRINTSPC(22)"   70 STEPS  "
  269. 5770 PRINTSPC(22)"   ^.......^"
  270. 5780 FORT=1TO3000:NEXT:PRINTSPC(22)"PRESS SPACE BAR"
  271. 5790 PRINTSPC(24)"TO CONTINUE[146]";
  272. 5795 GET K$:IF K$="" THEN 5795
  273. 5800 RW=3:CL=0:GOSUB7200:FORN=1TO18:PRINTSPC(22);"                ":NEXT
  274. 5810 RW=4:CL=21:GOSUB7200:PRINT"HELP IS AVALABLE"
  275. 5815 PRINTSPC(21)"  ON THE GAME"
  276. 5820 PRINTSPC(21)"    SCREEN"
  277. 5830 PRINTSPC(21)"PRESS..."
  278. 5832 PRINTSPC(22)"P[146] TO PLAY"
  279. 5834 PRINTSPC(22)"T[146] TECHNICAL NOTE"
  280. 5836 PRINTSPC(22)"W[146] WARNING ! "
  281. 5838 PRINTSPC(22)"R[146] REPEAT INSTRUCT."
  282. 5840 GET KP$:IF KP$="" THEN5840
  283. 5842 IF KP$="P" THEN RETURN
  284. 5844 IF KP$="T" THEN 5850
  285. 5846 IF KP$="W" THEN 5900
  286. 5847 IF KP$="R" THEN POKEV+21,3:GOTO5500
  287. 5848 GOTO 5840
  288. 5850 REM ** TECHNICAL **
  289. 5852 POKE V+21,3:PRINT"[147][153]"SPC(11)"TECHNICAL NOTES"
  290. 5854 PRINTSPC(11)"[192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]":PRINT
  291. 5856 PRINT" 1. THANKS TO CHRIS ZAMARA FOR 'SPRITE
  292. 5858 [153]"    ROTATE' ('TRANSACTOR'-V5 01).":[153]
  293. 5860 [153]" 2. SCREEN ASPECT RATIO IS CORRECTED
  294. 5862 PRINT"    (ROUGHLY) IN LINES 2890-2897.":PRINT
  295. 5864 PRINT" 3. IF YOU THINK THIS CODE IS SPAGHETTI
  296. 5866 [153]"    .. YOU SHOULD HAVE SEEN THE VERSION
  297. 5868 PRINT"    THAT USED THE PART OF THE SCREEN
  298. 5870 [153]"    TO THE RIGHT OF THE 'SEAM'.
  299. 5875 GOTO 5955
  300. 5900 REM ** DIRE WARNING **
  301. 5905 POKE V+21,3
  302. 5910 PRINT"[147][158]  !! WARNING: BROWNIES AND BEAVERS !!"
  303. 5915 PRINT"  [192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]":PRINT:PRINT
  304. 5920 PRINT"    THE LESSONS THIS GAME TEACHES
  305. 5925 [153]"   MAY SOME DAY SAVE YOUR VERY LIFE !
  306. 5930 PRINT"   DEEP IN THE WOODS, LOST, CONFUSED,
  307. 5935 [153]"   YOU WILL RECALL YOUR EXPERIENCE
  308. 5940 PRINT"   AT THE KEYBOARD, AND BLESS ME.
  309. 5945 [153]"  (ON THE OTHER HAND, YOU COULD JUST
  310. 5950 PRINT"         YELL FOR THE LEADER)
  311. 5955 [153]"           PRESS SPACE BARWAIT"
  312. 5960 [161] KP$:[139] KP$[178]"" [167] 5960
  313. 5965 [153]"LOAD":[137]5830
  314. 6000 [143] *** GENERATE MAZE ***
  315. 6005 V[178]53248:S0[178]2040:[151] S0,202:[151]V[170]16,0:CH[178]4
  316. 6010 [153]"LOADSYS";[166]32);"CHEESES"
  317. 6015 [153][166]34);"ANDANDAND"
  318. 6020 [153][166]33);"+SYS";CH;"SGN"
  319. 6022 [153][166]34);"USRUSRUSR"
  320. 6030 [129]N[178]1[164]22:RW[178][181]([187](1)[172]20)[170]1:CL[178][181]([187](1)[172]27):[141]7200
  321. 6040 [153] A1$;
  322. 6050 [130] N
  323. 6070 [129] N[178]2[164]5:[141]7120:[151]V[170]21,[194](V[170]21)[176]2[174]N:[130]
  324. 6080 [129]N[178]0[164]23:CL[178]30:RW[178]N:[141]7200:[153]"PRINT# ":[130]:[153][166]30);" WAIT";
  325. 6090 [142]
  326. 7000 [143] ***** SUBR *****
  327. 7100 [143] ***** CHEESE *****
  328. 7110 [151] 2041[170]N,201:[151]V[170]40[170]N,7
  329. 7120 SX[178][181]([187](1)[172]220)[170]24
  330. 7130 [151]V[170]2[170]2[172]N,SX
  331. 7150 SY[178][181]([187](1)[172]150)[170]50:[151]V[170]3[170]2[172]N,SY
  332. 7160 [142]
  333. 7200 [143] **** PRINT AT ROW,COL ****
  334. 7210 [151]781,RW:[151]782,CL:[151]783,0:[158]65520:[142]
  335. 7300 [143] *** DIRECTION HELP ***
  336. 7310 RW[178]18:CL[178]0:[141]7200
  337. 7320 [129]N[178]1[164]5:[153][166]31);DH$(N);:[130]
  338. 7330 HF[178]1:[137] 1040
  339. 7400 [143] *** DISTANCE HELP ***
  340. 7410 RW[178]17:CL[178]0:[141]7200
  341. 7420 [129]N[178]1[164]6:[153][166]31);DL$(N);:[130]
  342. 7430 HF[178]1:[137] 1200
  343. 7500 [143] ** BLANK MSG AREA **
  344. 7505 RW[178]17:CL[178]0:[141]7200
  345. 7510 [129]N[178]1[164]7:[153][166]31);EH$(6);:[130]
  346. 7520 [142]
  347.